home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / GNU / GNUPLOTsrc.lha / term / rgip.trm < prev    next >
Encoding:
Text File  |  1996-01-22  |  14.9 KB  |  603 lines

  1. /*
  2.  * $Id: rgip.trm,v 1.8 1995/12/20 21:48:11 drd Exp $
  3.  */
  4.  
  5. /* GNUPLOT - rgip.trm Uniplex graphics metafile */
  6. /*
  7.  * Copyright (C) 1990
  8.  *
  9.  * Permission to use, copy, and distribute this software and its
  10.  * documentation for any purpose with or without fee is hereby granted,
  11.  * provided that the above copyright notice appear in all copies and
  12.  * that both that copyright notice and this permission notice appear
  13.  * in supporting documentation.
  14.  *
  15.  * Permission to modify the software is granted, but not the right to
  16.  * distribute the modified code.  Modifications are to be distributed
  17.  * as patches to released version.
  18.  *
  19.  * This software  is provided "as is" without express or implied warranty.
  20.  *
  21.  * This file is included by ../term.c.
  22.  *
  23.  * This terminal driver supports:
  24.  *   RGIP metafile
  25.  *
  26.  * AUTHORS
  27.  *   Hans Olav Eggestad
  28.  *
  29.  * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
  30.  *
  31.  */
  32.  
  33. /*
  34.  * Original for direct RGIP Metafile output.
  35.  */
  36. /* 
  37.  * Max pixels for X and Y in one window is 10000.
  38.  */
  39. /*
  40.  * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
  41.  */
  42.  
  43. #ifndef GOT_DRIVER_H
  44. #include "driver.h"
  45. #endif
  46.  
  47. #ifdef TERM_REGISTER
  48. register_term(rgip)
  49. register_term(uniplex)
  50. #endif
  51.  
  52. #ifdef TERM_PROTO
  53. TERM_PUBLIC void RGIP_init __P((void));
  54. TERM_PUBLIC void RGIP_graphics __P((void));
  55. TERM_PUBLIC void RGIP_text __P((void));
  56. TERM_PUBLIC void RGIP_linetype __P((int lt));
  57. TERM_PUBLIC void RGIP_move __P((unsigned int x, unsigned int y));
  58. TERM_PUBLIC void RGIP_vector __P((unsigned int ux, unsigned int uy));
  59. TERM_PUBLIC int RGIP_text_angle __P((int angle));
  60. TERM_PUBLIC int RGIP_justify_text __P((enum JUSTIFY mode));
  61. TERM_PUBLIC void RGIP_put_text __P((unsigned int x, unsigned int y, char *str));
  62. TERM_PUBLIC void RGIP_reset __P((void));
  63. TERM_PUBLIC void RGIP_do_point __P((unsigned int x, unsigned int y, int number));
  64. TERM_PUBLIC void RGIP_options __P((void));
  65. #define RGIP_X_MAX 10000
  66. #define RGIP_Y_MAX 6700
  67.  
  68. #define RGIP_FONTSIZE 1
  69. #define RGIP_SC (300)
  70. #define RGIP_XMAX 9900
  71. #define RGIP_YMAX 6600
  72. #define RGIP_HTIC (100)
  73. #define RGIP_VTIC (100)
  74. #define RGIP_VCHAR (RGIP_FONTSIZE*RGIP_SC) 
  75. #define RGIP_HCHAR (RGIP_VCHAR*3/7)   
  76. #endif /* TERM_PROTO */
  77.  
  78. #ifndef TERM_PROTO_ONLY
  79. #ifdef TERM_BODY
  80.  
  81.  
  82. void RGIP_write_poly __P((void));
  83. static unsigned char * RGIP_cvts __P((unsigned char *str, int *lcnt));
  84. /* static void RGIP_setfont __P((int sz)); */
  85.  
  86. #include <sys/types.h>
  87. #include <sys/stat.h>
  88.  
  89. #define RGIPDOTS 0
  90. #define RGIPMARK 1
  91. #define RGIPTEXT 2
  92. #define RGIPLINE 3
  93. #define RGIPPOLY 4
  94. #define RGIP_MAX_POLY 250
  95. static char *RGIP_Obj[6] = { "DOTS", "MARK", "TEXT", "LINE", "POLY" };
  96.  
  97. /* 
  98.  * RGIP fontsises range from 1 to 8 
  99.  */
  100.  
  101. #define RGIP_FACES 3
  102. #define RGIP_FSTYLES 4
  103. #define RGIP_FSIZES 8
  104. #define RGIP_HELVETICA 0
  105. #define RGIP_TIMES 1
  106. #define RGIP_COURIER 2
  107. #define RGIP_LINE_WIDTHS 8 /* future, currently invisible and visible 0
  108. and 1 */
  109. #define RGIP_LINE_TYPES 8
  110. #define RGIP_COLORS 16
  111. #define RGIP_POINT_TYPES 8
  112.  
  113.  
  114.  
  115.  
  116. static int RGIP_orgX;        /* absolute-pixel-ORIgin of graph.    */
  117. static int RGIP_orgY;
  118. static int RGIP_orgx;        /* absolute-pixel-ORIgin of current plot. */
  119. static int RGIP_orgy;
  120. static int RGIP_posx;        /* current drawing position (lines).    */
  121. static int RGIP_posy;
  122. /* static int RGIP_inplot; */
  123. static int RGIP_xmax = RGIP_XMAX;  /* width of graph in pixels.        */
  124. static int RGIP_ymax = RGIP_YMAX;  /* height of graph in pixels.    */
  125. static int RGIP_winx = RGIP_XMAX;  /* width of graph in pixels.        */
  126. static int RGIP_winy = RGIP_YMAX;  /* height of graph in pixels.    */
  127. /* static int RGIP_blofs;        /* BaseLine OFfSet from bounding box.    */
  128. static int RGIP_angle = 0;    /* 0 for horizontal text, 90 for vertical */
  129. static int RGIP_portrait = 0;    /* 0 for horizontal text, 90 for vertical */
  130. static enum JUSTIFY RGIP_justify = LEFT; /* left/center/right */
  131. static int RGIP_fface = 2;  /* Times */
  132. static int RGIP_ftype = 1; /* style roman */
  133. static int RGIP_fontsize = RGIP_FONTSIZE; /*  */
  134. static int RGIP_tcol = 7;  /* text color */
  135. static int RGIP_lsty = 1;  /* line style */
  136. static int RGIP_lcol = 7;  /* line color */
  137. static int RGIP_lwid = 1;  /* line width */
  138. static int RGIP_fsty = 8;  /* fill style */
  139. static int RGIP_fcol = 8;  /* fill color */
  140. static int RGIP_mcol = 7;  /* marker color */
  141. static int RGIP_msty = 1;  /* marker style */
  142. static int RGIP_msize = 1;  /* marker size */
  143.  
  144. static int RGIP_win_horiz = 1;
  145. static int RGIP_win_verti = 1;
  146. static int RGIP_plot_nr = 0;
  147.  
  148. unsigned int RGIP_vecpos;
  149. unsigned int RGIP_xvector[RGIP_MAX_POLY];
  150. unsigned int RGIP_yvector[RGIP_MAX_POLY];
  151. static unsigned char *RGIP_cvts();
  152.  
  153.  
  154. TERM_PUBLIC void RGIP_init()
  155. {
  156.     register struct termentry *t = term;
  157.  
  158.     RGIP_posx = RGIP_posy = 0;
  159.  
  160.     if ( RGIP_portrait ) {
  161.         RGIP_orgX = (RGIP_Y_MAX - RGIP_YMAX) / 2;
  162.         RGIP_orgY = (RGIP_X_MAX - RGIP_XMAX) / 2;
  163.         RGIP_xmax = RGIP_winx = (int)(RGIP_YMAX / RGIP_win_horiz);
  164.         RGIP_ymax = RGIP_winy = (int)(RGIP_XMAX / RGIP_win_verti);
  165.     } else {
  166.         RGIP_orgX = (RGIP_X_MAX - RGIP_XMAX) / 2;
  167.         RGIP_orgY = (RGIP_Y_MAX - RGIP_YMAX) / 2;
  168.         RGIP_xmax = RGIP_winx = (int)(RGIP_XMAX / RGIP_win_horiz);
  169.         RGIP_ymax = RGIP_winy = (int)(RGIP_YMAX / RGIP_win_verti);
  170.     }
  171.  
  172.     t->xmax = (unsigned int)(RGIP_xmax);
  173.     t->ymax = (unsigned int)(RGIP_ymax);
  174.  
  175.     RGIP_vecpos = 0;
  176. }
  177.  
  178. TERM_PUBLIC void RGIP_graphics()
  179. {
  180.     static int Gnr = 0;
  181.     struct stat buf;
  182.     unsigned char *p, fn[128];
  183.  
  184.     int tmpx, tmpy;
  185. /*    int xoff, yoff; */
  186.  
  187.     if ( RGIP_vecpos ) {
  188.     RGIP_write_poly();
  189.     }
  190.  
  191.     if ( ! Gnr || RGIP_plot_nr >= ( RGIP_win_horiz * RGIP_win_verti )) {
  192.         fstat(fileno(outfile),&buf);
  193.         if ( S_ISREG(buf.st_mode)) {
  194.         if ( (p=(unsigned char *)strchr(outstr,'X')) ){ /* substitute X with graphnr */
  195.         if ( ! Gnr ) { /* delete the base file */
  196.             sprintf(fn,"%s",&outstr[1]);
  197.             fn[strlen(fn)-1]='\0';
  198.             unlink(fn);
  199.         } else {
  200.                 fputs("%RI_GROUPEND\n", outfile);
  201.             fclose(outfile);
  202.         }
  203.         *p = '\0';
  204.         sprintf(fn,"%s%1d%s",&outstr[1],++Gnr,p+1);
  205.            fn[strlen(fn)-1]='\0';
  206.                 if ( (outfile = fopen(fn,"w")) == (FILE *)NULL ) {
  207.                      os_error("cannot reopen file with binary type; output unknown",
  208.                            NO_CARET);
  209.                 }
  210.         *p = 'X';  /* put back X */
  211.             }
  212.         }
  213.     fputs("%RGIP_METAFILE: 1.0a\n", outfile);
  214.     fputs("%RI_GROUPSTART\n", outfile);
  215.     fprintf(outfile,"0 0 %d %d SetWindow\n", 
  216.         (RGIP_portrait)?RGIP_Y_MAX : RGIP_X_MAX,
  217.         (RGIP_portrait)?RGIP_X_MAX : RGIP_Y_MAX);
  218.     fprintf(outfile,"100 100 %d %d 10 1 7 1 8 BOX\n", 
  219.         (RGIP_portrait) ? RGIP_YMAX : RGIP_XMAX,
  220.         (RGIP_portrait) ? RGIP_XMAX : RGIP_YMAX);
  221.     RGIP_plot_nr = 0;
  222.     } else {
  223.         fputs("%RI_GROUPEND\n", outfile);
  224.     }
  225.     fputs("%RI_GROUPSTART\n", outfile);
  226.     RGIP_plot_nr++;
  227.     /* Gnr++; */
  228.     tmpx = RGIP_orgX + ((RGIP_plot_nr - 1) % RGIP_win_horiz) * RGIP_winx;
  229.     tmpy = RGIP_orgY + ((RGIP_win_verti - 1) - (int)((RGIP_plot_nr - 1) / RGIP_win_horiz)) * RGIP_winy;
  230.     RGIP_orgx = tmpx + (int)((RGIP_winx - RGIP_xmax)/2);
  231.     RGIP_orgy = tmpy + (int)((RGIP_winy - RGIP_ymax)/2);
  232.  
  233.  
  234.     /* RGIP_linetype(-1); */
  235. }
  236.  
  237. TERM_PUBLIC void RGIP_text()
  238. {
  239. }
  240.  
  241. TERM_PUBLIC void RGIP_linetype(lt)
  242. int lt;
  243. {
  244. /*    int pen, pattern; */
  245.  
  246.     if ( RGIP_vecpos ) {
  247.     RGIP_write_poly();
  248.     }
  249. /*  -2: axis
  250.  *  -1: border
  251.  *   0: arrow
  252.  *   1-7: graph
  253. */
  254.     if ( lt == -2 ) {
  255.     lt = 1;
  256.     RGIP_lwid = 5;
  257.     } else if ( lt == -1 ) {
  258.     lt = 5;
  259.     RGIP_lwid = 2;
  260.     } else {
  261.     RGIP_lwid = (int) (lt/RGIP_LINE_TYPES);
  262.     if ( RGIP_lwid < 1 ) RGIP_lwid = 1;
  263.     RGIP_lwid *= 2;
  264.         lt  = (lt % RGIP_LINE_TYPES) + 1;
  265.     }
  266.     fputs("%RI_GROUPEND\n", outfile);
  267.     fputs("%RI_GROUPSTART\n", outfile);
  268.  
  269.     /* RGIP_lsty  = (lt == 0 || lt == 2) ? 1 : lt; */
  270.  
  271.     RGIP_lsty = lt;
  272. }
  273.  
  274.  
  275. TERM_PUBLIC void RGIP_move(x,y)
  276.     unsigned int x,y;
  277. {
  278. /*
  279.     fputs("%RI_GROUPEND\n", outfile);
  280.     fputs("%RI_GROUPSTART\n", outfile);
  281. */
  282.     if ( RGIP_vecpos ) {
  283.     RGIP_write_poly();
  284.     }
  285.     RGIP_xvector[0] = x + RGIP_orgx;
  286.     RGIP_yvector[0] = y + RGIP_orgy;
  287.     RGIP_vecpos = 1;
  288.     /*
  289.     RGIP_posx = x;
  290.     RGIP_posy = y;
  291.     */
  292. }
  293.  
  294.  
  295. TERM_PUBLIC void RGIP_vector(ux,uy)
  296.     unsigned int ux,uy;
  297. {
  298.     /* store polygon-node */
  299.  
  300.     RGIP_xvector[RGIP_vecpos] = ux + RGIP_orgx;
  301.     RGIP_yvector[RGIP_vecpos] = uy + RGIP_orgy;
  302.     RGIP_vecpos++;
  303.     if ( RGIP_vecpos >= RGIP_MAX_POLY ) {
  304.     RGIP_write_poly();
  305.     RGIP_xvector[RGIP_vecpos] = ux + RGIP_orgx;
  306.     RGIP_yvector[RGIP_vecpos] = uy + RGIP_orgy;
  307.     RGIP_vecpos++;
  308.     }
  309. }
  310.  
  311. void RGIP_write_poly()
  312. {
  313.     register int i;
  314.  
  315.     putc ('[',outfile);
  316.     for (i=0;i<RGIP_vecpos;i++) {
  317.     if ( ! (i%8)) putc ('\n',outfile);
  318.     fprintf (outfile," %1d",RGIP_xvector[i]);
  319.     fprintf (outfile," %1d",RGIP_yvector[i]);
  320.     }
  321.     RGIP_vecpos = 0;
  322.     putc (']',outfile);
  323.  
  324.     fprintf(outfile," %1d %d %1d %1d %1d %s\n", RGIP_lwid, RGIP_lsty,
  325.         RGIP_lcol, RGIP_fsty, RGIP_fcol, RGIP_Obj[RGIPPOLY]);
  326.  
  327.     /*
  328.     RGIP_posx = ux;
  329.     RGIP_posy = uy;
  330.     */
  331.     /* RGIP_move(ux, uy); */
  332. }
  333.  
  334.  
  335. TERM_PUBLIC int RGIP_text_angle(angle)
  336.     int angle;
  337. {
  338.     if ( RGIP_vecpos ) {
  339.     RGIP_write_poly();
  340.     }
  341.     if (RGIP_angle != angle) {
  342.        RGIP_angle = angle;    /* record for later use */
  343.     }
  344.  
  345.     return(TRUE);
  346. }
  347.  
  348. TERM_PUBLIC int RGIP_justify_text(mode)
  349.     enum JUSTIFY mode;
  350. {
  351.     if ( RGIP_vecpos ) {
  352.     RGIP_write_poly();
  353.     }
  354.     RGIP_justify = mode;
  355.     return(TRUE);
  356. }
  357.  
  358. static unsigned char *
  359. RGIP_cvts(str,lcnt)
  360.     unsigned char        *str;
  361.     int *lcnt;            /* lines */
  362. {
  363.     unsigned char        *cp1;
  364.     unsigned char        *cp2;
  365.     static unsigned char    *buf = NULL;
  366.     int lc = 1;
  367.  
  368.     lc = 1;
  369.     /* Free up old buffer, if there is one, get a new one.  Since    */
  370.     /* all transformations shorten the string, get a buffer that is    */
  371.     /* the same size as the input string.                */
  372.  
  373.     if (buf != NULL)
  374.      (void) free(buf);
  375.     buf = (unsigned char *) alloc(strlen(str), "converted label string");
  376.  
  377.     /* Do the transformations. */
  378.  
  379.     cp1 = str;
  380.     cp2 = buf;
  381.     while (strlen(cp1) > 0) {
  382.        switch (*cp1) {
  383.             case  '\\' :    /* Escape sequence. */
  384.              if (*++cp1 == '\\') {
  385.                 /* Begin new line. */
  386.                 *cp2++ = '\n';
  387.                 lc++;
  388.                 break;
  389.              }
  390.         
  391.             case '(' :
  392.             *cp2++ = '\\';
  393.             *cp2++ = '(';
  394.             break;
  395.             case ')' :
  396.             *cp2++ = '\\';
  397.             *cp2++ = ')';
  398.             break;
  399.             /* Fall through to just copy next char out.    */
  400.         
  401.             default :
  402.              *cp2++ = *cp1;
  403.             break;
  404.         }
  405.        cp1++;
  406.     }
  407.  
  408.     *cp2++ = '\n';
  409.     *cp2 = '\0';
  410.     *lcnt = lc; 
  411.     return (buf);
  412. }
  413.  
  414. TERM_PUBLIC void RGIP_put_text(x, y, str)
  415.     unsigned int x,y;            /* reference point of string */
  416.     char *str;                /* the text */
  417. {
  418.     register struct termentry *t = term;
  419.     unsigned char *cvstr, *p;
  420.     int xlines;        /* lines */
  421.  
  422.     if ( RGIP_vecpos ) {
  423.     RGIP_write_poly();
  424.     }
  425.     cvstr = RGIP_cvts(str,&xlines);
  426.  
  427.     x += RGIP_orgx,
  428.     y += RGIP_orgy;
  429.  
  430.     if (! RGIP_angle) {      /* horisontal */
  431.     y += (int)(t->v_char)*(xlines-2)/2;
  432.     /* y += (t->v_char)*xlines; */
  433.     y += (int)(t->v_char)/4;
  434.     } else {
  435.     x -= (int)(t->v_char)*(xlines-2)/2;
  436.     x -= (int)(t->v_char)/4;
  437.     }
  438.  
  439.     while ( (p=(unsigned char *)strchr(cvstr,'\n' )) ){
  440.     *p = '\0';
  441.     if (strlen(cvstr)) 
  442.             fprintf(outfile,"%1d %1d %1d  %1d (%s) %1d %1d %1d %1d %s\n",
  443.                 x,y,RGIP_justify, RGIP_angle*90, cvstr, RGIP_fface, RGIP_ftype,
  444.                 RGIP_fontsize, RGIP_tcol, RGIP_Obj[RGIPTEXT]);
  445.     cvstr = ++p;
  446.     if (RGIP_angle) {     /* vertical */
  447.         x += (t->v_char);
  448.     } else {
  449.         y -= (t->v_char);
  450.     }
  451.     }
  452. }
  453.  
  454.  
  455. TERM_PUBLIC void RGIP_reset()
  456. {
  457.     if ( RGIP_vecpos ) {
  458.     RGIP_write_poly();
  459.     }
  460.     fputs("%RI_GROUPEND\n", outfile);
  461.     /* fputs("%RI_GROUPEND\n", outfile); */
  462. }
  463.  
  464. /* static void
  465. RGIP_setfont(sz)
  466.     int sz;
  467. {
  468.     RGIP_fontsize = (int) (sz);
  469.     if ( RGIP_fontsize < 1 ) RGIP_fontsize = 1;
  470.     term->v_char = (unsigned int)(RGIP_fontsize*RGIP_SC);
  471.     term->h_char = (unsigned int)(RGIP_fontsize*RGIP_SC*3/7);
  472. }
  473. */
  474.  
  475. TERM_PUBLIC void RGIP_do_point(x,y,number)
  476. unsigned int x,y;
  477. int number;
  478. {
  479.  
  480.     x += RGIP_orgx,
  481.     y += RGIP_orgy;
  482.  
  483.     if (number < 0) {        /* do dot */
  484.         fprintf(outfile,"%1d %1d %1d %s\n",
  485.                x,y,RGIP_mcol,RGIP_Obj[RGIPDOTS]);
  486.         return;
  487.     }
  488.  
  489.     RGIP_msty = (number % RGIP_POINT_TYPES) + 1;
  490.     RGIP_msize = ((int)(number / RGIP_POINT_TYPES)) + 1;
  491.  
  492.     fprintf(outfile,"%1d %1d %1d %1d %1d %s\n",
  493.                x,y,RGIP_msize, RGIP_msty, RGIP_mcol, RGIP_Obj[RGIPMARK]);
  494. }
  495.  
  496. TERM_PUBLIC void RGIP_options()
  497. {
  498.     struct value a;
  499.  
  500.     while (!END_OF_COMMAND) {
  501.         if (almost_equals(c_token,"p$ortrait")) {
  502.             RGIP_portrait=TRUE;
  503.             c_token++;
  504.         }
  505.         else if (almost_equals(c_token,"l$andscape")) {
  506.             RGIP_portrait=FALSE;
  507.             c_token++;
  508.         }
  509.         else if (equals(c_token,"[")) { /* windows spesified */
  510.             c_token++;
  511.             /* if (RGIP_plot_nr>1) */
  512.             if (equals(c_token,"]")) {
  513.                 /* RGIP_page(); */
  514.                 c_token++;
  515.                 continue;
  516.             }
  517.             if (END_OF_COMMAND) {
  518.                     int_error("no. windows: [horizontal,vertical] expected",c_token);
  519.             } else if (!equals(c_token,","))  {
  520.                 RGIP_win_horiz = (int)real(const_express(&a));
  521.             }    
  522.             if (!equals(c_token,","))
  523.                 int_error("',' expected",c_token);
  524.             c_token++;
  525.             if (!equals(c_token,"]")) {
  526.                 RGIP_win_verti = (int)real(const_express(&a));
  527.              }
  528.             if (!equals(c_token,"]"))
  529.                   int_error("expecting ']'",c_token);
  530.             c_token++;
  531.         } else {
  532.             /* We have font size specified */
  533.             RGIP_fontsize = (int)real(const_express(&a));
  534.             if ( RGIP_fontsize < 1 ) 
  535.                 RGIP_fontsize = 1;
  536.             term->v_char = (unsigned int)(RGIP_fontsize*RGIP_SC);
  537.             term->h_char = (unsigned int)(RGIP_fontsize*RGIP_SC*3/7);
  538.         }
  539.     }
  540.     sprintf(term_options,"%s %d [%1d,%1d]",
  541.         (RGIP_portrait)?"portrait":"landscape",
  542.         RGIP_fontsize,RGIP_win_horiz,RGIP_win_verti);
  543. }
  544.  
  545. #endif /* TERM_BODY */
  546.  
  547. #ifdef TERM_TABLE
  548.  
  549. TERM_TABLE_START(rgip_driver)
  550.     "rgip", "RGIP metafile (Uniplex). Option: fontsize (1-8)",
  551.        RGIP_XMAX, RGIP_YMAX, RGIP_VCHAR, RGIP_HCHAR,
  552.        RGIP_VTIC, RGIP_HTIC, RGIP_options, RGIP_init, RGIP_reset,
  553.        RGIP_text, null_scale, RGIP_graphics, RGIP_move,
  554.        RGIP_vector, RGIP_linetype, RGIP_put_text, RGIP_text_angle,
  555.        RGIP_justify_text, RGIP_do_point, do_arrow, set_font_null
  556. TERM_TABLE_END(rgip_driver)
  557.  
  558. #undef LAST_TERM
  559. #define LAST_TERM rgip_driver
  560.  
  561. TERM_TABLE_START(uniplex_driver)
  562.     "uniplex", "RGIP metafile (Uniplex). Option: fontsize (1-8) (Same
  563. as rgip)",
  564.        RGIP_XMAX, RGIP_YMAX, RGIP_VCHAR, RGIP_HCHAR,
  565.        RGIP_VTIC, RGIP_HTIC, RGIP_options, RGIP_init, RGIP_reset,
  566.        RGIP_text, null_scale, RGIP_graphics, RGIP_move,
  567.        RGIP_vector, RGIP_linetype, RGIP_put_text, RGIP_text_angle,
  568.        RGIP_justify_text, RGIP_do_point, do_arrow, set_font_null
  569. TERM_TABLE_END(uniplex_driver)
  570.  
  571. #undef LAST_TERM
  572. #define LAST_TERM uniplex_driver
  573.  
  574.  
  575. #endif /* TERM_TABLE */
  576. #endif /* TERM_PROTO_ONLY */
  577.  
  578. /*
  579.  * NAME: rgip
  580.  *
  581.  * OPTIONS: font-size (legal 1-8; default 1)
  582.  *        portrait|landscape (default landscape)
  583.  *        [horiz,vert] = window size, use with [], alternative to prt|lands
  584.  *
  585.  * SUPPORTS: RGIP metafile (Uniplex)
  586.  *
  587.  * Further Info: Same as uniplex terminal.
  588.  *
  589.  */
  590.  
  591. /*
  592.  * NAME: uniplex
  593.  *
  594.  * OPTIONS: font-size (legal 1-8; default 1)
  595.  *        portrait|landscape (default landscape)
  596.  *        [horiz,vert] = window size, use with [], alternative to prt|lands
  597.  *
  598.  * SUPPORTS: RGIP metafile (Uniplex)
  599.  *
  600.  * Further Info: Same as rgip terminal.
  601.  *
  602.  */
  603.